1)
So apparently there is a bug in SWIG's director where it doesn't respect some typemap nonsense. The fix is NOT to add SWIGTYPE_p_void. 

If a non-callback wants a SWIGTYPE_p_void then there is a problem with a wrapper.

You need to remove all references of it like:

return getWalkCost(xFrom, yFrom, xTo, yTo, (userData == IntPtr.Zero) ? null : new SWIGTYPE_p_void(userData, false));

return getWalkCost(xFrom, yFrom, xTo, yTo);

You'll also need to update the virtual method and the swigMethodTypes0 like:

  public virtual float getWalkCost(int xFrom, int yFrom, int xTo, int yTo, System.Runtime.InteropServices.HandleRef userData) {
    float ret = libtcodPINVOKE.ITCODPathCallback_getWalkCost(swigCPtr, xFrom, yFrom, xTo, yTo, userData);
    return ret;
  }
  
  to
  
  public virtual float getWalkCost(int xFrom, int yFrom, int xTo, int yToa) {
    float ret = libtcodPINVOKE.ITCODPathCallback_getWalkCost(swigCPtr, xFrom, yFrom, xTo, yTo, new HandleRef());
    return ret;
  }


2)
Also, change the return type of TCODNameGenerator::getSets to System.Collections.Generic.IEnumerable<string> 

3)
Also, remove these (stupid variable arguments...):

  public void printFrame(int x, int y, int w, int h, bool clear, TCODBackgroundFlag flag, string fmt, string arg7, string VARARGS_SENTINEL) {
    libtcodPINVOKE.TCODConsole_printFrame__SWIG_0(swigCPtr, x, y, w, h, clear, (int)flag, fmt, arg7, VARARGS_SENTINEL);
  }

  public void printFrame(int x, int y, int w, int h, bool clear, TCODBackgroundFlag flag, string fmt, string arg7) {
    libtcodPINVOKE.TCODConsole_printFrame__SWIG_1(swigCPtr, x, y, w, h, clear, (int)flag, fmt, arg7);
  }

4)  
Also, Remove the HandleRefs() from TCODPath

5)
Also remove HandleRefs() from TCODBsp

6)
Also remove TCODNameGenerator overloads that expose allocate